# 作者: 薛文寅仟
# 2025年01月03日22时33分42秒
# 5443912@qq.com
import re


def use_greedy():
    """
    因为贪婪，所以.把前面的英文和23一起吃了，若把4也吃了会导致第一个\d匹配不上而报错
    所以ret.group(1)只返回4-235-22-423，改成非贪婪只需要在多个字符前加个?
    """
    s = "This is a number 234-235-22-423"
    ret = re.match(r".+?(\d+-\d+-\d+-\d+)", s)
    print(ret.group(1))
    print(re.match(r"aa(\d+)", "aa2343ddd").group(1))
    # ?：将贪婪的 + 转为非贪婪模式，使其尽可能少地匹配。
    print(re.match(r"aa(\d+?)", "aa2343ddd").group(1))

    print(re.match(r"aa(\d+)ddd", "aa2343ddd").group(1))
    # 这里非贪婪没有用因为pattern中后面加了ddd，要匹配到ddd那边，所以加了?也没用
    print(re.match(r"aa(\d+?)ddd", "aa2343ddd").group(1))


def use_r():
    """
    r的作用, 原生字串，不加r的话匹配一个\要用两个\
    :return:
    """
    mm = "c:\\a\\b\\c"
    print(mm)
    print(re.match(r"c:\\", mm).group())


def use_option():
    """
    re.A不让\w匹配汉字
    有re.I即是不区分大小写
    re.S可以让.匹配上\n
    """
    print(re.match(r'\w*', 'abc函', flags=re.A).group())
    print(re.match(r'a*', 'aA', flags=re.I).group())
    print(re.match(r'.*', 'abc\ndef', flags=re.S).group())


if __name__ == '__main__':
    # use_greedy()
    # use_r()
    use_option()
